/*
 * Copyright 2006-2007 S W McIlroy
 * Licensed  under the  Apache License,  Version 2.0  (the "License");
 * you may not use  this file  except in  compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed  under the  License is distributed on an "AS IS" BASIS,
 * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
 * implied.
 *
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.mockfu;

import static org.mockfu.Mocks.*;

import java.io.FileInputStream;

import org.testng.annotations.Test;

public class ConstrainedMethodTest
{
    @Test
    public void method() throws Exception
    {
        ConstrainedMethod m = $( $( Runtime.class ).totalMemory() );
        assertThat( (Class) m.getDeclaringClass(), Runtime.class );
        assertThat( m.getName(), "totalMemory" );
        assertThat( m.matches() );

        m = $( $( Runtime.class ).exec( "ls" ) );
        assertThat( m.getName(), "exec" );
        assertThat( m.matches( "ls" ) );
        assertThat( !m.matches( "sl" ) );
        assertThat( !m.matches( (Object) null ) );
    }

    @Test
    public void constructor()
    {
        ConstrainedMethod m = new ConstrainedMethod( FileInputStream.class, matches( ".*passwd" ) );
        assertThat( (Class) m.getDeclaringClass(), FileInputStream.class );
        assertThat( m.matches( "/etc/passwd" ) );
        assertThat( !m.matches( "/etc/shadow" ) );
    }

    @Test
    public void constraints()
    {
        ConstrainedMethod m = $( $( Object.class ).equals( isA( StringBuilder.class ) ) );

        assertThat( m.matches( new StringBuilder() ) );
        assertThat( !m.matches( "" ) );
    }
}
